package main

import (
	"fmt"
	"math/rand"
	"sync"
	"time"
)

func f() {
	rand.Seed(int64(time.Now().UnixNano())) // 随机数种子，保证程序每次创新执行都不一样
	for i := 0; i < 5; i++ {
		r1 := rand.Int()
		r2 := rand.Intn(20) // 0<= x <20
		fmt.Printf("r1: %v r2: %v\n", r1, r2)

	}
}

var wg sync.WaitGroup

func main() {
	// 随机数的用法
	// f()

	for i := 0; i < 5; i++ {
		wg.Add(1) // 计数器加一
		// 每个goroutine协程随机睡眠x秒
		go func(i int) {
			defer wg.Done()                                             // 计数器减一
			time.Sleep(time.Duration(rand.Intn(20)) * time.Millisecond) // time.Sleep接收一个Duration类型的参数，需要轻质类型转换
			fmt.Printf("goroutine i: %v wake up\n", i)
		}(i)
	}

	// 如何直到上面的goroutine全部结束？
	wg.Wait() // 等待计数器为0
}
